# -*- coding: utf-8 -*-
"""
AutoGPT 最小循环 Demo（本地 Qwen3:8b）
流程：Plan -> Criticize -> Act -> Observe -> Plan(修订) ...
"""

from langchain_ollama import OllamaLLM

llm = OllamaLLM(model="qwen3:8b", temperature=0.3)


def ask_llm(prompt):
    print(f"\n[Prompt]\n{prompt}")
    result = llm.invoke(prompt)
    print(f"[LLM Output]\n{result}\n")
    return result.strip()


def main():
    # 1. 用户输入目标
    goal = "写一篇关于人工智能对未来社会影响的短文"
    print(f"目标：{goal}")

    # 2. Plan
    plan_prompt = f"""你是一个智能体。你的目标是：{goal}
请将目标分解为可执行的详细计划，列出每一步。"""
    plan = ask_llm(plan_prompt)

    for round in range(2):  # 演示两轮循环
        print(f"\n=== 第 {round + 1} 轮 ===")

        # 3. Criticize
        criticize_prompt = f"""以下是实现目标的计划：
{plan}
请评估该计划的可行性和效率，指出潜在问题和改进建议。"""
        criticism = ask_llm(criticize_prompt)

        # 4. Act（这里只执行计划的第一步，实际可扩展为自动执行）
        act_prompt = f"""请根据以下计划的第一步，模拟执行操作，并输出执行结果：
计划：
{plan}
"""
        act_result = ask_llm(act_prompt)

        # 5. Observe
        observe_prompt = f"""你刚刚执行了如下操作，结果如下：
操作结果：{act_result}
请分析该结果，给出反馈，指出是否达成预期，有哪些可以改进的地方。"""
        observation = ask_llm(observe_prompt)

        # 6. Plan(修订)
        revise_prompt = f"""根据以下反馈，请修订原始计划，使其更优：
原始计划：
{plan}
反馈：
{observation}
请输出修订后的新计划。"""
        plan = ask_llm(revise_prompt)


if __name__ == "__main__":
    main()
